import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../../common/utils/index.dart';
import '../../../common/routers/index.dart';
import '../../../common/services/index.dart';

class MainController extends GetxController {
  // 1. 静态常量（类级别）
  static const String tag = 'MainController';
  
  // 2. 响应式变量（Rx系列）
  var isLoading = false.obs;                   // RxBool
  var currentPageTitle = '首页'.obs;             // RxString - 页面标题
  
  // 集合类型 - 使用.obs写法
  var userSettings = <String, dynamic>{}.obs;  // RxMap<String, dynamic>
  
  // 3. 普通变量（非响应式）
  bool _isInitialized = false;
  
  // 4. 控制器和服务依赖
  late AppLifecycleManager _lifecycleManager;
  late UserService _userService;
  
  // 5. 构造函数
  MainController() {
    debugPrint('$tag: Constructor');
  }

  // 6. 私有初始化方法
  void _initData() {
    debugPrint('$tag: 🚀 开始初始化主页数据');
    
    // 初始化用户设置
    userSettings.assignAll({
      'theme': 'light',
      'language': 'zh_CN',
      'notifications': true,
    });
    
    // 同步最新用户信息
    _syncUserProfile();
    
    _isInitialized = true;
    update(["main"]);
    
    debugPrint('$tag: ✅ 主页数据初始化完成');
  }

  /// 同步最新专家信息
  void _syncUserProfile() async {
    try {
      debugPrint('$tag: 🔄 开始同步最新专家信息');
      
      // 检查登录状态
      if (!_userService.isLoggedIn) {
        debugPrint('$tag: 用户未登录，跳过专家信息同步');
        return;
      }
      
      // 调用UserService获取最新专家信息
      final expertInfo = await _userService.getExpertInfo();
      
      debugPrint('$tag: ✅ 专家信息同步成功');
      debugPrint('$tag: 专家姓名: ${expertInfo.name}');
      
    } catch (e) {
      final errorMsg = e.toString();
      
      if (errorMsg.contains('未登录')) {
        debugPrint('$tag: 专家未登录，跳过专家信息同步');
      } else {
        debugPrint('$tag: ⚠️ 专家信息同步失败: $e');
      }
    }
  }

  // 8. 生命周期回调方法
  
  /// 初始化生命周期回调
  void _initLifecycleCallbacks() {
    debugPrint('$tag: 初始化生命周期回调');
    
    _lifecycleManager = Get.find<AppLifecycleManager>();
    _lifecycleManager.addForegroundCallback(_onAppForeground);
    _lifecycleManager.addBackgroundCallback(_onAppBackground);
    
    debugPrint('$tag: 生命周期回调注册完成');
  }
  
  /// 清理生命周期回调
  void _clearLifecycleCallbacks() {
    debugPrint('$tag: 清理生命周期回调');
    
    try {
      _lifecycleManager.removeForegroundCallback(_onAppForeground);
      _lifecycleManager.removeBackgroundCallback(_onAppBackground);
      
      debugPrint('$tag: 生命周期回调清理完成');
    } catch (e) {
      debugPrint('$tag: 清理生命周期回调时出错: $e');
    }
  }
  
  /// 应用回到前台时的处理
  void _onAppForeground() {
    debugPrint('$tag: 应用回到前台');
    
    if (_isInitialized) {
      // 同步最新专家信息
      _syncUserProfile();
    }
  }
  
  /// 应用进入后台时的处理
  void _onAppBackground() {
    debugPrint('$tag: 应用进入后台');
  }

  // 9. 业务方法
  
  /// 刷新页面数据
  void refreshData() async {
    debugPrint('$tag: 开始刷新数据');
    
    try {
      isLoading.value = true;
      update(["main"]);
      
      await Future.delayed(const Duration(seconds: 1));
      
      _initData();
      
      debugPrint('$tag: 数据刷新完成');
      
    } catch (e) {
      debugPrint('$tag: 数据刷新失败: $e');
    } finally {
      isLoading.value = false;
      update(["main"]);
    }
  }

  /// 手动同步专家信息
  void syncUserProfile() {
    debugPrint('$tag: 📡 手动触发专家信息同步');
    _syncUserProfile();
  }

  // 7. 生命周期方法
  @override
  void onInit() {
    super.onInit();
    debugPrint('$tag: onInit');
    
    // 初始化服务依赖
    _userService = Get.find<UserService>();
    
    // 初始化生命周期管理器
    _initLifecycleCallbacks();
  }

  @override
  void onReady() {
    super.onReady();
    debugPrint('$tag: onReady');
    _initData();
  }

  @override
  void onClose() {
    debugPrint('$tag: onClose');
    
    // 清理生命周期回调
    _clearLifecycleCallbacks();
    
    super.onClose();
  }
}
